package com.airlines.crewassignment.dao.linkline;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.airlines.base.dao.base.BaseMapper;
import com.airlines.crewassignment.domain.DateTimeRange;
import com.airlines.crewassignment.entity.linkline.TaskLoopFlightFact;

public interface TaskLoopFlightFactMapper extends BaseMapper<TaskLoopFlightFact, Integer>{

	TaskLoopFlightFact getTaskLoopFlightFact(@Param("dutyCode")String dutyCode, @Param("flightId")int flightId);
	
	/**
	 * 根据某个航班，查询同一个机组连线的任务环信息，包括他自己
	 * @param dutyCode
	 * @param flightId
	 * @return
	 */
	List<TaskLoopFlightFact> listTaskLoopFlightFactByFlightId(@Param("dutyCode")String dutyCode, @Param("flightId")int flightId);
	
	/**
	 * 更新某个航班的过站休息时间
	 * @param flightId
	 * @return
	 */
	int updateRestTime(@Param("dutyCode")String dutyCode, @Param("flightId")int flightId, @Param("restTime")Integer restTime);

	/**
	 * 从序列中创建一个任务环实例值
	 * @return
	 */
	String buildTaskLoopFact();
	
	/**
	 * 删除某一段时间范围内所有任务环信息
	 * @param dutyCode
	 * @param dateTimeRange
	 */
	int deleteByFlightDate(@Param("dutyCode")String dutyCode,@Param("dateTimeRange")DateTimeRange dateTimeRange);
	
	/**
	 * 更新某个任务环中的航班为差航线
	 * @param dutyCode
	 * @param flightId
	 * @param badRoute
	 * @return
	 */
	int updateBadRoute(@Param("dutyCode")String dutyCode, @Param("flightId")int flightId, @Param("badRoute")Boolean badRoute);
   
	/**
	 * 更新某个连线的任务环实例号
	 * @param dutyCode
	 * @param flightId
	 * @param taskLoopFact
	 * @return
	 */
	int updateTaskLoopFact(@Param("dutyCode")String dutyCode, @Param("flightId")int flightId, @Param("taskLoopFact")String taskLoopFact);
	
	/**
	 * 根据日期+连线，查询该连线对应的任务环实例信息
	 * @param dutyCode
	 * @param flightDate
	 * @param crewLinkLine
	 * @return
	 */
	List<TaskLoopFlightFact> listTaskLoopFlightFactByCrewLinkLine(@Param("dutyCode")String dutyCode,
			@Param("flightDate")Date flightDate,@Param("crewLinkLine")int crewLinkLine);
	
	/**
	 * 查询一段时间内的航班任务环信息
	 * @param dateTimeRange
	 * @return
	 */
	List<TaskLoopFlightFact>  listTaskLoopFlightFactByDateTimeRange(@Param("dateTimeRange") DateTimeRange dateTimeRange);

	/**
	 * 更新某个航线的男性最少人数
	 * @param dutyCode
	 * @param flightId
	 * @param minMale
	 * @return
	 */
	int updateMinMale(@Param("dutyCode")String dutyCode, @Param("flightId")int flightId, @Param("minMale") int minMale);
	
	/**
	 * 更新某个航线为国际航线并且时区超过6个时区
	 * @param dutyCode
	 * @param flightId
	 * @param internationalTimeZoneMore6
	 * @return
	 */
	int updateInternationalTimeZoneMore6(@Param("dutyCode")String dutyCode, @Param("flightId")int flightId, @Param("internationalTimeZoneMore6")Boolean internationalTimeZoneMore6);

	/**
	 * 任务环几人制
	 * @param dutyCode
	 * @param flightId
	 * @param crewType
	 * @return
	 */
	int updateCrewTypeId(@Param("dutyCode")String dutyCode, @Param("flightId")int flightId,  @Param("crewTypeId")Integer crewTypeId);
}